package org.dllwh.utils.apache.poi.word.util;


import org.apache.poi.util.Units;

/**
 * 把今天最好的表现当作明天最新的起点．．～
 * <p>
 * Today the best performance as tomorrow the newest starter!
 *
 * @ClassName UnitCovert
 * @Description 基于 Apache POI 的单位转换工具类
 * @Date 2025-11-22 17:07
 * @版本 V 1.0.1
 * @since JDK 17
 */
public class UnitConverter {
    /**
     * 厘米与 TWIPS（缇，即 1/20 点）的转换比例，1 cm = 567 TWIPS
     */
    private static final double TWIPS_PER_CM = 567;
    /**
     * TWIPS到Points的转换因子，1 point = 20 TWIPS
     */
    private static final double POINTS_TO_TWIPS_FACTOR = 20.0;

    /**
     * 厘米转TWIPS
     *
     * @param cm 厘米值
     * @return TWIPS值
     * @throws IllegalArgumentException 如果输入的厘米值为负数、NaN或无穷大
     */
    public static int cmToTwips(double cm) {
        if (cm < 0 || Double.isNaN(cm) || Double.isInfinite(cm)) {
            throw new IllegalArgumentException("输入的厘米值不能为负数、NaN或无穷大");
        }
        return (int) Math.round(cm * TWIPS_PER_CM);
    }

    /**
     * 像素转TWIPS
     *
     * @param pixels 像素值
     * @return TWIPS值
     */
    public static double pixelsToTwips(int pixels) {
        if (pixels < 0) {
            throw new IllegalArgumentException("pixels值不能为负数");
        }
        return Units.pixelToPoints(pixels) * POINTS_TO_TWIPS_FACTOR;
    }
}
